package com.yunpeng.aidevice.dao.mapper.entity;

import com.yunpeng.aidevice.dao.mapper.IEntityMapper;
import com.yunpeng.aidevice.dao.model.MerchantCountDO;
import com.yunpeng.aidevice.dao.model.entity.DeviceDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备 Mapper 接口
 * </p>
 *
 * @author hemw
 * @since 2020-04-26
 */
@Mapper
public interface DeviceMapper extends IEntityMapper<DeviceDO> {

    /**
     * 根据编号获取设备对象
     *
     * @param number
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    DeviceDO getByNumber(@Param("number") String number, @Param("merchantCode") String merchantCode, @Param("tenantCode") String tenantCode);

    /**
     *
     * 根据设备标识获取设备对象
     * @param deviceId
     * @return
     */
    DeviceDO getByDeviceId(@Param("deviceId") String deviceId);

    /**
     * 统计同个租户、同个商户下设备编号是否存在，排除指定代码
     *
     * @param number
     * @param code
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Integer countNumberExistsExcludeCode(@Param("number") String number, @Param("code") String code, @Param("merchantCode") String merchantCode, @Param("tenantCode") String tenantCode);

    /**
     * 统计商户设备数量
     *
     * @param merchantCodes
     * @param tenantCode
     * @param state
     * @return
     */
    List<MerchantCountDO> countByMerchant(@Param("merchantCodes") List<String> merchantCodes, @Param("tenantCode") String tenantCode, @Param("state") String state);

}
